﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FrbaBus.Properties;

namespace FrbaBus.GenerarViaje
{
    public partial class FormGenerarViaje : Form
    {
        public FormGenerarViaje()
        {
            InitializeComponent();
        }

        private void btnMicro_Click(object sender, EventArgs e)
        {
            FormViajeMicro form = new FormViajeMicro();
            form.ShowDialog(this);

            txMicro.Text = form.microSeleccionado.ToString();
            

        }

        private void btnRecorrido_Click(object sender, EventArgs e)
        {
            FormViajeRecorrido form = new FormViajeRecorrido();
            form.ShowDialog(this);

            txRecorrido.Text = form.recorridoSeleccionado.ToString();
        }

        private void btnGenerar_Click(object sender, EventArgs e)
        {
            StringBuilder errores = validarCampos();


            //Si no hay errores, genero el viaje
            if (errores.ToString() == String.Empty)
            {

                string sConnectionString = Settings.Default.GD1C2013ConnectionString;
                SqlConnection connection = new SqlConnection(sConnectionString);
                SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_generar_viaje", connection);
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = Convert.ToInt64(txMicro.Text.Trim().ToString());
                cmd.Parameters.Add(new SqlParameter("@p_rec_codigo", SqlDbType.BigInt)).Value = Convert.ToInt64(txRecorrido.Text.Trim().ToString());
                cmd.Parameters.Add(new SqlParameter("@p_fecha_salida", SqlDbType.DateTime)).Value = Convert.ToDateTime(dtpSalida.Text.ToString().Trim());
                cmd.Parameters.Add(new SqlParameter("@p_fecha_llegada", SqlDbType.DateTime)).Value = Convert.ToDateTime(dtpLlegadaEstimada.Text.ToString().Trim());

                cmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                cmd.CommandTimeout = 1000;

                connection.Open();
                cmd.ExecuteNonQuery();

                int valorRetorno = Convert.ToInt32(cmd.Parameters["@returnValue"].Value);

                connection.Close();

                if (valorRetorno == 0)
                {
                    MessageBox.Show("El viaje fue generado correctamente", "INFORMACION");
                    this.Hide();
                }
                if (valorRetorno == 1)
                {
                    MessageBox.Show("El micro elegido no cumple las condiciones para el recorrido en cuestión", "INFORMACION");
                }
                if (valorRetorno == 3)
                {
                    MessageBox.Show("El micro elegido no se encuentra disponible en la fechas solicitadas", "INFORMACION");
                }

            }
            else
            {
                MessageBox.Show(errores.ToString());
                return;
            }
        }

        private StringBuilder validarCampos()
        {
            var errores = new StringBuilder();

            if (txMicro.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione un micro antes de continuar");
                errores.AppendLine();
            }
            if (txRecorrido.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione un recorrido antes de continuar");
                errores.AppendLine();
            }
            if (dtpSalida.Value < Fechas.fechaSistema) {
                errores.Append("Por favor, selecciona una fecha correcta antes de continuar. La fecha de salida debe ser posterior a la fecha actual.");
                errores.AppendLine();
            }
            return errores;
        
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
    }
}
